home *** CD-ROM | disk | FTP | other *** search
- /*
- 16 color VRAM charactor dsiplay
- 1993.6.19 made by y.ouchi
- algorithm base on Oh FM (1991.3 by Ken)
- */
-
- .data
- .align 2
- /** VRAM font pattern with color code **/
- .lcomm fntcol,1024
-
- /** color code 4bit/pixel pattern **/
- colptn: .long 0x00000000,0x11111111,0x22222222,0x33333333
- .long 0x44444444,0x55555555,0x66666666,0x77777777
- .long 0x88888888,0x99999999,0xaaaaaaaa,0xbbbbbbbb
- .long 0xcccccccc,0xdddddddd,0xeeeeeeee,0xffffffff
-
- /** 16 color VRAM charactor pattern (4bit/pixel) **/
- fntptn: .long 0x00000000,0xf0000000,0x0f000000,0xff000000 /* 00-03 */
- .long 0x00f00000,0xf0f00000,0x0ff00000,0xfff00000 /* 04-07 */
- .long 0x000f0000,0xf00f0000,0x0f0f0000,0xff0f0000 /* 08-0b */
- .long 0x00ff0000,0xf0ff0000,0x0fff0000,0xffff0000 /* 0c-0f */
- .long 0x0000f000,0xf000f000,0x0f00f000,0xff00f000 /* 10-13 */
- .long 0x00f0f000,0xf0f0f000,0x0ff0f000,0xfff0f000 /* 14-17 */
- .long 0x000ff000,0xf00ff000,0x0f0ff000,0xff0ff000 /* 18-1b */
- .long 0x00fff000,0xf0fff000,0x0ffff000,0xfffff000 /* 1c-1f */
- .long 0x00000f00,0xf0000f00,0x0f000f00,0xff000f00 /* 20-23 */
- .long 0x00f00f00,0xf0f00f00,0x0ff00f00,0xfff00f00 /* 24-27 */
- .long 0x000f0f00,0xf00f0f00,0x0f0f0f00,0xff0f0f00 /* 28-2b */
- .long 0x00ff0f00,0xf0ff0f00,0x0fff0f00,0xffff0f00 /* 2c-2f */
- .long 0x0000ff00,0xf000ff00,0x0f00ff00,0xff00ff00 /* 30-33 */
- .long 0x00f0ff00,0xf0f0ff00,0x0ff0ff00,0xfff0ff00 /* 34-37 */
- .long 0x000fff00,0xf00fff00,0x0f0fff00,0xff0fff00 /* 38-3b */
- .long 0x00ffff00,0xf0ffff00,0x0fffff00,0xffffff00 /* 3c-3f */
- .long 0x000000f0,0xf00000f0,0x0f0000f0,0xff0000f0 /* 40-43 */
- .long 0x00f000f0,0xf0f000f0,0x0ff000f0,0xfff000f0 /* 44-47 */
- .long 0x000f00f0,0xf00f00f0,0x0f0f00f0,0xff0f00f0 /* 48-4b */
- .long 0x00ff00f0,0xf0ff00f0,0x0fff00f0,0xffff00f0 /* 4c-4f */
- .long 0x0000f0f0,0xf000f0f0,0x0f00f0f0,0xff00f0f0 /* 50-53 */
- .long 0x00f0f0f0,0xf0f0f0f0,0x0ff0f0f0,0xfff0f0f0 /* 54-57 */
- .long 0x000ff0f0,0xf00ff0f0,0x0f0ff0f0,0xff0ff0f0 /* 58-5b */
- .long 0x00fff0f0,0xf0fff0f0,0x0ffff0f0,0xfffff0f0 /* 5c-5f */
- .long 0x00000ff0,0xf0000ff0,0x0f000ff0,0xff000ff0 /* 60-43 */
- .long 0x00f00ff0,0xf0f00ff0,0x0ff00ff0,0xfff00ff0 /* 64-47 */
- .long 0x000f0ff0,0xf00f0ff0,0x0f0f0ff0,0xff0f0ff0 /* 68-4b */
- .long 0x00ff0ff0,0xf0ff0ff0,0x0fff0ff0,0xffff0ff0 /* 6c-4f */
- .long 0x0000fff0,0xf000fff0,0x0f00fff0,0xff00fff0 /* 70-73 */
- .long 0x00f0fff0,0xf0f0fff0,0x0ff0fff0,0xfff0fff0 /* 74-77 */
- .long 0x000ffff0,0xf00ffff0,0x0f0ffff0,0xff0ffff0 /* 78-7b */
- .long 0x00fffff0,0xf0fffff0,0x0ffffff0,0xfffffff0 /* 7c-7f */
- .long 0x0000000f,0xf000000f,0x0f00000f,0xff00000f /* 80-83 */
- .long 0x00f0000f,0xf0f0000f,0x0ff0000f,0xfff0000f /* 84-87 */
- .long 0x000f000f,0xf00f000f,0x0f0f000f,0xff0f000f /* 88-8b */
- .long 0x00ff000f,0xf0ff000f,0x0fff000f,0xffff000f /* 8c-8f */
- .long 0x0000f00f,0xf000f00f,0x0f00f00f,0xff00f00f /* 90-93 */
- .long 0x00f0f00f,0xf0f0f00f,0x0ff0f00f,0xfff0f00f /* 94-97 */
- .long 0x000ff00f,0xf00ff00f,0x0f0ff00f,0xff0ff00f /* 98-9b */
- .long 0x00fff00f,0xf0fff00f,0x0ffff00f,0xfffff00f /* 9c-9f */
- .long 0x00000f0f,0xf0000f0f,0x0f000f0f,0xff000f0f /* a0-a3 */
- .long 0x00f00f0f,0xf0f00f0f,0x0ff00f0f,0xfff00f0f /* a4-a7 */
- .long 0x000f0f0f,0xf00f0f0f,0x0f0f0f0f,0xff0f0f0f /* a8-ab */
- .long 0x00ff0f0f,0xf0ff0f0f,0x0fff0f0f,0xffff0f0f /* ac-af */
- .long 0x0000ff0f,0xf000ff0f,0x0f00ff0f,0xff00ff0f /* b0-b3 */
- .long 0x00f0ff0f,0xf0f0ff0f,0x0ff0ff0f,0xfff0ff0f /* b4-b7 */
- .long 0x000fff0f,0xf00fff0f,0x0f0fff0f,0xff0fff0f /* b8-bb */
- .long 0x00ffff0f,0xf0ffff0f,0x0fffff0f,0xffffff0f /* bc-bf */
- .long 0x000000ff,0xf00000ff,0x0f0000ff,0xff0000ff /* c0-c3 */
- .long 0x00f000ff,0xf0f000ff,0x0ff000ff,0xfff000ff /* c4-c7 */
- .long 0x000f00ff,0xf00f00ff,0x0f0f00ff,0xff0f00ff /* c8-cb */
- .long 0x00ff00ff,0xf0ff00ff,0x0fff00ff,0xffff00ff /* cc-cf */
- .long 0x0000f0ff,0xf000f0ff,0x0f00f0ff,0xff00f0ff /* d0-d3 */
- .long 0x00f0f0ff,0xf0f0f0ff,0x0ff0f0ff,0xfff0f0ff /* d4-d7 */
- .long 0x000ff0ff,0xf00ff0ff,0x0f0ff0ff,0xff0ff0ff /* d8-db */
- .long 0x00fff0ff,0xf0fff0ff,0x0ffff0ff,0xfffff0ff /* dc-df */
- .long 0x00000fff,0xf0000fff,0x0f000fff,0xff000fff /* e0-e3 */
- .long 0x00f00fff,0xf0f00fff,0x0ff00fff,0xfff00fff /* e4-e7 */
- .long 0x000f0fff,0xf00f0fff,0x0f0f0fff,0xff0f0fff /* e8-eb */
- .long 0x00ff0fff,0xf0ff0fff,0x0fff0fff,0xffff0fff /* ec-ef */
- .long 0x0000ffff,0xf000ffff,0x0f00ffff,0xff00ffff /* f0-f3 */
- .long 0x00f0ffff,0xf0f0ffff,0x0ff0ffff,0xfff0ffff /* f4-f7 */
- .long 0x000fffff,0xf00fffff,0x0f0fffff,0xff0fffff /* f8-fb */
- .long 0x00ffffff,0xf0ffffff,0x0fffffff,0xffffffff /* fc-ff */
-
- .text
- /*
- charactor color & back color table set
- void ctblset(chrcol,backcol);
- int chrcol : charactor color(0-15)
- int backcol: back color(0-15)
- */
- .align 4
- .globl _ctblset
- _ctblset:
- pushl %ebp
- movl %esp,%ebp
-
- pushl %esi
- pushl %edi
-
- movzbl 8(%ebp),%eax
- andl $0x0000000f,%eax
- shll $2,%eax
- movl colptn(%eax),%eax
- movl %eax,8(%ebp)
-
- movzbl 12(%ebp),%eax
- andl $0x0000000f,%eax
- movl colptn(,%eax,4),%eax
- movl %eax,12(%ebp)
-
- movl $256,%ecx
- movl $fntptn,%esi
- movl $fntcol,%edi
-
- ctblp: lodsl
- movl %eax,%edx
- notl %edx
- andl 8(%ebp),%eax
- andl 12(%ebp),%edx
- orl %edx,%eax
- stosl
- loop ctblp
-
- popl %edi
- popl %esi
- popl %ebp
- ret
-
- /*
- sjis KANJI charactor write to VRAM from color font table
- void cwrt_kan(ch,addr);
- int ch : sjis charactor code
- int addr: VRAM address
- */
- .align 4
- .globl _cwrt_kan
- _cwrt_kan:
- pushl %ebp
- movl %esp,%ebp
-
- pushl %fs
- pushl %gs
- pushl %es
- pushl %ds
- pushl %esi
- pushl %edi
- pushl %edx
- pushl %ebx
-
- movw $0x104,%ax
- movw %ax,%es
- movw $0x110,%ax
- movw %ax,%fs
- movw %ds,%ax
- movw %ax,%gs
-
- movl 8(%ebp),%ebx
- movb $0x02,%ah
- lcall %fs:0xa0
-
- movw $0x100,%ax
- movw $0x1010,%dx
- lcall %fs:0xa0
-
- movl %ss:12(%ebp),%edi
- movl $fntcol,%ebx
-
- movl $16,%ecx
-
- wt_kn1: movw %ds:(%esi),%ax
- xorl %edx,%edx
- movb %al,%dl
- movl %gs:(%ebx,%edx,4),%edx
- movl %edx,%es:(%edi)
- xorl %edx,%edx
- movb %ah,%dl
- movl %gs:(%ebx,%edx,4),%edx
- movl %edx,%es:4(%edi)
- addl $2,%esi
- addl $512,%edi
- decl %ecx
- jne wt_kn1
-
- popl %ebx
- popl %edx
- popl %edi
- popl %esi
- popl %ds
- popl %es
- popl %gs
- popl %fs
- popl %ebp
- ret
-
- /*
- ank charactor write to VRAM from color font table
- void cwrt_ank(ch,addr);
- int ch : ank charactor code
- int addr: VRAM address
- */
- .align 4
- .globl _cwrt_ank
- _cwrt_ank:
- pushl %ebp
- movl %esp,%ebp
-
- pushl %fs
- pushl %gs
- pushl %es
- pushl %ds
- pushl %esi
- pushl %edi
- pushl %edx
- pushl %ebx
-
- movw $0x104,%ax
- movw %ax,%es
- movw $0x110,%ax
- movw %ax,%fs
- movw %ds,%ax
- movw %ax,%gs
-
- movl 8(%ebp),%ebx
-
- movw $0x000,%ax
- movw $0x0810,%dx
- lcall %fs:0xa0
-
- movl %ss:12(%ebp),%edi
- movl $fntcol,%ebx
-
- movl $16,%ecx
-
- wt_ak1: movb %ds:(%esi),%al
- xorl %edx,%edx
- movb %al,%dl
- movl %gs:(%ebx,%edx,4),%edx
- movl %edx,%es:(%edi)
- incl %esi
- addl $512,%edi
- decl %ecx
- jne wt_ak1
-
- popl %ebx
- popl %edx
- popl %edi
- popl %esi
- popl %ds
- popl %es
- popl %gs
- popl %fs
- popl %ebp
- ret
-